#include <iostream>
using namespace std;
//class A {
//public:
//    int _a;
//public:
//    virtual void func1(){}
//};
//
//class B :virtual public A{
//public:
//    int _b;
//public:
//    virtual void func1() {}
//    virtual void funcb(){}
//};
// 
//class C :virtual public A {     //虚继承--》数据的冗余和二义性
//public:
//    int _c;
//    virtual void func1(){}     //虚函数   --多态有关系
//    virtual void funcc() {}
//};
//
//class D :public B, public C {
//public:
//    int _d;
//public:
//    virtual void func1() {}
//};
//
//
//int main()
//{
//    D d;
//    d.B::_a = 1;
//    d.C::_a = 2;
//    d._b = 3;
//    d._c = 4;
//    d._d = 5;
//
//    return 0;
//}

/////////////////////////////////////////////////////////////
class A {
public:
	A(const char* s) { cout << s << endl; }
	~A() {}
};
class B :virtual public A
{
public:
	B(const char* s1, const char* s2) :A(s1) { cout << s2 << endl; }
};
class C :virtual public A
{
public:
	C(const char* s1, const char* s2) :A(s1) { cout << s2 << endl; }
};
class D :public B, public C
{
public:
	D(const char* s1, const char* s2, const char* s3, const char* s4) :B(s1, s2), C(s1, s3), A(s1) //初始化列表和下面的主题内容，谁先调用
	{
		cout << s4 << endl;   //最后执行
	}
};

int main()
{
	D* p = new D("class A", "class B", "class C", "class D");
	delete p; 
	return 0;
}

//  class A   class B  class C     class D
